#pragma once

#include "common.hpp"

struct  ICar {
public:
    ICar()          = default;
    virtual ~ICar() = default;

    virtual void func() const = 0;     // pure virtual function
private:
    std::string _brand;
    int _age;
};


struct Bus : ICar{
   Bus() {}
   void func() const override {
        std::cout << "=========Bus::func()=========" << std::endl;
   }
};

struct Car : ICar{
   Car() {}
   void func() const override {
        std::cout << "=========Car::func()=========" << std::endl;
   }
};

int ioc();